## Examples of the extension constructor

from PyM import *

K = Zn(3)

[F,x] = extension(K,[1,0,-1,1]) # f = X**3-X+1

show(F) 
show(x) 

[F,x] = extension(K,[1,0,-1,1],'t')

show(F) 

show(x) 

[F,t] = extension(K,[1,0,-1,1])

show(F) 

show(t) 

[F,x] = extension(K,[1,0,-1,1],name='K[x]')

show(F) 

show(x)

q = cardinal(F)

show(q) 

show(order(x)) 

show(geometric_series(2*x+1,4))

P = [(x**j,j) for j in range(q)]

show(lookup(x**2+x+2,P))

def log(a): return lookup(a,P)

show(log(x**2+x+2))

show(log(x**19))


F2 = Zn(2)

# Polynomial ring over F2
[F2X,X] = polynomial_ring(F2, 'X')

f = X**5+X**2+1

show(is_irreducible(f,F2))

# Construction of F32
[F32,a] = extension(F2,f,'a','F')

# Since 32-1 = 31 is prime, a is a primitive element
show(order(a))

# A ring of 32 elements which is not a field
g = X**5+X+1

show(is_irreducible(g,F2))

show(factor(g)) 

# g = (X**2+X+1)*(X**3+X**2+1)

[A32,b] = extension(F2,g)

show((b**2+b+1)*(b**3+b**2+1))

'''
# An extension of a ring

A = Zn(12)

[B,x] = extension(A,[1,0,1,5])

t = x**10+x**3

show(t)

show(t+t**4)

show(1/t)
'''







